1. Field of the Disclosure
The present disclosure relates generally to processing image data, more particularly, to systems and methods for performing orthogonal rotation, mirroring, or combinations thereof on an image.
2. Description of the Related Art
Many graphics systems have been designed and implemented to manipulate images for printing or display. In imaging devices such as printers, for example, typical image manipulation functions include mirroring, orthogonal rotation, or combinations thereof. Image mirroring involves symmetrically reflecting an image about an axis, such as the horizontal or vertical axis. On the other hand, orthogonal image rotation involves rotating an image orthogonally about the x-axis or y-axis. In the past, rotation and/or mirroring have been carried out using software which offers more flexibility. However, rotation and/or mirroring algorithms in software are not very efficient due to the extensive bit calculations in a processor, and high amount of memory accesses to small non-contiguous portions of memory. As a result, some imaging devices have been equipped with rotate hardware assist blocks in their SoCs (System on a Chip) that could not only perform the functions previously done in software at faster speeds but also offload or free up the processor to do more complicated and less repetitive tasks.
Some existing rotate hardware block designs, however, typically require relatively large gate counts in order to logically operate and combine complex functions to perform rotation and/or mirroring which increases overall system cost. Meanwhile, other hardware implementations are able to provide high throughput but with more limited flexibility. For example, some rotate block designs operate by reading words of image data from a memory buffer. The larger the bit-depth of the image data, the better the throughput would be as more bits of each word would be used in every clock to generate output data. For instance, if the image data is 8 bits-per-pixel (bpp), then 8 bits are used for every word read from the input buffer, and a couple of clock cycles are needed to read a number of words from the memory buffer in order to process all image data bits and generate a rotated image. However, if a low bit-depth was used, then only a portion of a word is used to generate output data. For instance, if the image data is 1 bpp, then only a single bit is used for every word read from the memory buffer to generate output data. Thus, it could take additional clock cycles as more read operations from the memory buffer are required in order to process all the image data bits of the image and generate a rotated image.
While these example approaches have to some extent been successful in terms of providing more efficiency than using software when performing mirroring and rotation functions, hardware graphics systems with even higher performance, more flexibility, and lower cost are still desired.